
    import java.util.PriorityQueue;

    public class Test {
        // 核心方法：计算最小总比较次数
        public static int calculateMinComparisons(int[] sequenceLengths) {
            // 1. 初始化最小堆（优先队列），存入所有序列长度
            PriorityQueue<Integer> minHeap = new PriorityQueue<>();
            for (int len : sequenceLengths) {
                minHeap.offer(len);
            }

            int totalComparisons = 0; // 总比较次数
            // 2. 循环合并：直到堆中只剩1个序列
            while (minHeap.size() > 1) {
                // 取两个最小长度的序列
                int len1 = minHeap.poll();
                int len2 = minHeap.poll();
                // 计算本次合并的比较次数（m+n-1）
                int currentCompare = len1 + len2 - 1;
                totalComparisons += currentCompare;
                // 合并后的新序列长度入堆
                minHeap.offer(len1 + len2);
            }
            return totalComparisons; // 返回最小总比较次数
        }

        // （主方法用于测试，此处省略输入输出逻辑）
        public static void main(String[] args) {
            int[] lengths = {2, 3, 5}; // 序列长度数组
            System.out.println("最小总比较次数：" + calculateMinComparisons(lengths));
        }
    }

